/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servico;

import DAO.VagaDAO;
import Modelo.Vaga;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import util.FabricaDeObjetos;
import util.JPAUtil;

/**
 *
 * @author ntpadmin
 */
public class VagaService {

    private static VagaDAO vagaDAO;

    static {
        try {
            vagaDAO = (VagaDAO) FabricaDeObjetos.getObjetoUnico(VagaDAO.class);
        } catch (Exception ex) {
            Logger.getLogger(VagaService.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void validaInformacoesVaga(Vaga vagaCorrente) throws Exception {

        if (isBlank(vagaCorrente.getCodigo()) || isBlank(vagaCorrente.getCampus())) {
            throw new Exception("Vaga invalida!");
        }
    }

    private boolean isBlank(String str) {
        return (str == null) || (str.trim().equals(""));
    }

    public List<Vaga> consultar(Vaga vagaConsulta) throws Exception {

        List<Vaga> retorno = new ArrayList<Vaga>();

        if (!camposEmBranco(vagaConsulta)) {

            retorno = vagaDAO.getByFilters(vagaConsulta);

        } else {
            retorno = vagaDAO.getAll();
        }

        if (retorno != null && !retorno.isEmpty()) {
            return retorno;
        } else {
            throw new Exception("Nenhum resultado encontrado!");
        }
    }

    public void incluirVaga(Vaga vagaCorrente) throws Exception {

        vagaDAO.insert(vagaCorrente);
    }

    public boolean vagaCadastrada(Vaga vagaCorrente) {
        
        Vaga retorno = null;
        
        if (vagaCorrente != null && vagaCorrente.getId() != null) {
            
            retorno = vagaDAO.getByPrimaryKey(vagaCorrente);

        } else {

            List<Vaga> listaUsuarios = vagaDAO.getByFilters(vagaCorrente);

            for (Vaga vaga : listaUsuarios) {

                if (vaga.equals(vagaCorrente)) {

                    retorno = vaga;

                    break;
                }
            }
        }

        return retorno != null;
    }

    private boolean camposEmBranco(Vaga vaga){
        return (isBlank(vaga.getCodigo()) && isBlank(vaga.getCampus()));
    }

    public void remover(Vaga vaga) {

        JPAUtil.beginTransaction();

        vagaDAO.remove(vaga);

        JPAUtil.commitTransaction();
    }

    public void editar(Vaga vaga) {

        JPAUtil.beginTransaction();

        vagaDAO.merge(vaga);

        JPAUtil.commitTransaction();
    }
}